package br.com.ucb.invista.dao;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;

import br.com.ucb.invista.connection.EntityManagerFactory;
import br.com.ucb.invista.domain.MovimentoFinanceiro;

public class MovimentoFinanceiroDao {

private static final long serialVersionUID = 1L;
	
	private EntityManager entityManager;
	private MovimentoFinanceiro movimentoFinanceiro;
	private List<MovimentoFinanceiro> listarMovimentoFinanceiros;
	
	@SuppressWarnings("unchecked")
	public MovimentoFinanceiroDao() {
		this.entityManager = EntityManagerFactory.getEntityManager();
		this.movimentoFinanceiro = new MovimentoFinanceiro();
		this.listarMovimentoFinanceiros = entityManager.createQuery("FROM MovimentoFinanceiro order by pessoa").getResultList();
	}
	
	public Boolean salvar(MovimentoFinanceiro movimentoFinanceiro) {
		try {
			this.entityManager.getTransaction().begin();
				this.entityManager.persist(movimentoFinanceiro);
					String mensagemSucesso = "O registro foi Persistido com Sucesso!";
					FacesMessage mensagem = new FacesMessage(FacesMessage.SEVERITY_INFO, mensagemSucesso, "");
					FacesContext.getCurrentInstance().addMessage(null, mensagem);
					this.entityManager.getTransaction().commit();
						return true;
		} catch (Exception exception) {
			this.entityManager.getTransaction().rollback();
			System.out.println("Erro ao tentar Persistir a Entidade: " + exception.getMessage());
			exception.printStackTrace();
		}
		return false;
	}
	
	public Boolean alterar(MovimentoFinanceiro movimentoFinanceiro) {
		try {
			this.entityManager.getTransaction().begin();	
				this.entityManager.merge(movimentoFinanceiro);
					this.entityManager.getTransaction().commit();
						return true;
		} catch (Exception exception) {
			this.entityManager.getTransaction().rollback();
			System.out.println("Erro ao tentar Alterar a Entidade: " + exception.getMessage());
			exception.printStackTrace();
		}
		return false;
	}
	
	public Boolean excluir(MovimentoFinanceiro movimentoFinanceiro) {
		try {	
			this.entityManager.getTransaction().begin();
				this.entityManager.remove(movimentoFinanceiro);
					String mensagemSucesso = "O registro foi Excluido com Sucesso!";
					FacesMessage mensagem = new FacesMessage(FacesMessage.SEVERITY_INFO, mensagemSucesso, "");
					FacesContext.getCurrentInstance().addMessage(null, mensagem);
					this.entityManager.getTransaction().commit();
						return true;
		} catch (Exception exception) {
			this.entityManager.getTransaction().rollback();
			System.out.println("Erro ao tentar Excluir a Entidade: " + exception.getMessage());
			exception.printStackTrace();
		}
		return false;
	}
	
	public MovimentoFinanceiro pesquisarCodigo(Long codigo) {
		return this.entityManager.find(MovimentoFinanceiro.class, codigo);
	}

	public EntityManager getEntityManager() {
		return entityManager;
	}

	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}

	public MovimentoFinanceiro getMovimentoFinanceiro() {
		return movimentoFinanceiro;
	}

	public void setMovimentoFinanceiro(MovimentoFinanceiro movimentoFinanceiro) {
		this.movimentoFinanceiro = movimentoFinanceiro;
	}

	public List<MovimentoFinanceiro> getListarMovimentoFinanceiros() {
		return listarMovimentoFinanceiros;
	}

	public void setListarMovimentoFinanceiros(
			List<MovimentoFinanceiro> listarMovimentoFinanceiros) {
		this.listarMovimentoFinanceiros = listarMovimentoFinanceiros;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}
}
